﻿using System;
using System.Collections.Generic;
using System.Data;

namespace DSA4_Heldenerstellung
{
    public class Rasse_C
    {
        public Rasse_C(DataRow Data)
        {

            Name = Data["Rasse_Name"].ToString();
            Grundpunkte = Convert.ToInt16(Data["Grundpunkte"].ToString());
            Groessenformel = Data["Groesse"].ToString();
            Gewichtabzug = Convert.ToInt16(Data["Gewicht"].ToString());
            InitHaarfarben(Data["Haarfarben"].ToString());
            InitAugenfarben(Data["Augenfarben"].ToString());
            InitModifikatoren(Data["Modifikatoren"].ToString());
            InitAutoVorteile(Data["Automatische_Vorteile"].ToString());
            InitAutoNachteile(Data["Automatische_Nachteile"].ToString());
            InitEmpfohleneVorteile(Data["Empfohlene_Vorteile"].ToString());
            InitEmpfohleneNachteile(Data["Empfohlene_Nachteile"].ToString());
            InitUngeeigneteVorteile(Data["Ungeeignete_Vorteile"].ToString());
            InitUngeeigneteNachteile(Data["Ungeeignete_Nachteile"].ToString());
            InitKulturen(Data["Kulturen"].ToString());
            InitTalente(Data["Talente"].ToString());
            PortraitPfad = Data["Portrait"].ToString();
            InitInfoBesonderheiten(Data["Info"].ToString(), Data["Besonderheiten"].ToString());


        }

        public Dictionary<String, Int16> HaarfarbeDict { get; set; }

        public Dictionary<String, Int16> AugenfarbeDict { get; set; }

        public Dictionary<String, Int16> ModifikatorDict { get; set; }

        public Dictionary<String, Int16> TalenteDict { get; set; }

        public List<string> AutoVorteile { get; set; }

        public List<string> AutoNachteile { get; set; }

        public List<string> EmpfohleneVorteile { get; set; }

        public List<string> EmpfohleneNachteile { get; set; }

        public List<string> UngeeigneteVorteile { get; set; }

        public List<string> UngeeigneteNachteile { get; set; }

        public List<string> Kulturen { get; set; }

        public String PortraitPfad { get; set; }

        public String Info { get; set; }

        public String Besonderheiten { get; set; }

        public String Name { get; set; }

        public Int16 Grundpunkte { get; set; }

        private String Groessenformel;

        private Int16 Gewichtabzug;

        public String Haarfarbe
        {
            get
            {
                int wahrsch = 0;
                int rndValue = 0;
                Random rnd = new Random();
                rndValue = rnd.Next(1, 100);
                foreach (string item in this.HaarfarbeDict.Keys)
                {
                    wahrsch = wahrsch + this.HaarfarbeDict[item];
                    if (rndValue <= wahrsch)
                    {
                        return item;
                    }
                }

                return "Fehler";
            }
        }

        public String Augenfarbe
        {
            get
            {
                int wahrsch = 0;
                int rndValue = 0;
                Random rnd = new Random();
                rndValue = rnd.Next(1, 100);
                foreach (string item in this.AugenfarbeDict.Keys)
                {
                    wahrsch = wahrsch + this.AugenfarbeDict[item];
                    if (rndValue <= wahrsch)
                    {
                        return item;
                    }
                }
                return "Fehler";
            }
        }

        public String Groesse
        {
            get
            {
                String[] daten = Groessenformel.Split(';');
                int rndValue = 0;
                Random rnd = new Random();

                rndValue = Convert.ToInt32(daten[0]);
                for (int i = 0; i < Convert.ToInt32(daten[1]); i++)
                {
                    rndValue += rnd.Next(1, 20);
                }
                for (int i = 0; i < Convert.ToInt32(daten[2]); i++)
                {
                    rndValue += rnd.Next(1, 6);
                }

                return rndValue.ToString();
            }
        }

        public String BerechneGewicht(String _Groesse)
        {
            return (Convert.ToInt16(_Groesse) - this.Gewichtabzug).ToString();
        }

        private void InitInfoBesonderheiten(String _Info, String _Besonderheiten)
        {
            this.Info = _Info;
            if (this.Info.Length > 2)
            {
                this.Info = this.Info.Remove(0, 2);
            this.Info = this.Info.Replace("        ", "");
            }

            this.Besonderheiten = _Besonderheiten;
            if (this.Besonderheiten.Length > 2)
            {
                this.Besonderheiten = this.Besonderheiten.Remove(0, 2);
                this.Besonderheiten = this.Besonderheiten.Replace("        ", "");
            }
        }

        private void InitHaarfarben(String _Haarfarben)
        {
            this.HaarfarbeDict = new Dictionary<string, short>();

            if (_Haarfarben == "")
                return;

            String[] haarfarbe = _Haarfarben.Split(';');

            foreach (String item in haarfarbe)
            {
                String[] farbe_wahrscheinlichkeit = item.Split('|');
                this.HaarfarbeDict.Add(farbe_wahrscheinlichkeit[0], Convert.ToInt16(farbe_wahrscheinlichkeit[1]));
            }
        }

        private void InitAugenfarben(String _Augenfarben)
        {
            this.AugenfarbeDict = new Dictionary<string, short>();

            if (_Augenfarben == "")
                return;

            String[] augenfarbe = _Augenfarben.Split(';');

            foreach (String item in augenfarbe)
            {
                String[] farbe_wahrscheinlichkeit = item.Split('|');
                this.AugenfarbeDict.Add(farbe_wahrscheinlichkeit[0], Convert.ToInt16(farbe_wahrscheinlichkeit[1]));
            }
        }

        private void InitModifikatoren(String _Modifikatoren)
        {
            this.ModifikatorDict = new Dictionary<string, short>();

            if (_Modifikatoren == "")
                return;

            String[] modifikatoren = _Modifikatoren.Split(';');

            foreach (String item in modifikatoren)
            {
                String[] eigenschaft_mod = item.Split('|');
                this.ModifikatorDict.Add(eigenschaft_mod[0], Convert.ToInt16(eigenschaft_mod[1]));
            }
        }

        private void InitTalente(String _Talente)
        {
            this.TalenteDict = new Dictionary<string, short>();

            if (_Talente == "")
                return;

            String[] talente = _Talente.Split(';');

            foreach (String item in talente)
            {
                String[] talent_mod = item.Split('|');
                this.TalenteDict.Add(talent_mod[0], Convert.ToInt16(talent_mod[1]));
            }
        }

        private void InitAutoVorteile(String _AutoVorteile)
        {
            String[] vorteil = _AutoVorteile.Split(';');

            this.AutoVorteile = new List<string>();

            foreach (String item in vorteil)
            {
                this.AutoVorteile.Add(item);
            }
        }

        private void InitAutoNachteile(String _AutoNachteile)
        {
            String[] nachteil = _AutoNachteile.Split(';');

            this.AutoNachteile = new List<string>();

            foreach (String item in nachteil)
            {
                this.AutoNachteile.Add(item);
            }
        }

        private void InitEmpfohleneVorteile(String _EmpfohleneVorteile)
        {
            String[] vorteil = _EmpfohleneVorteile.Split(';');

            this.EmpfohleneVorteile = new List<string>();

            foreach (String item in vorteil)
            {
                this.EmpfohleneVorteile.Add(item);
            }
        }

        private void InitEmpfohleneNachteile(String _EmpfohleneNachteile)
        {
            String[] nachteil = _EmpfohleneNachteile.Split(';');

            this.EmpfohleneNachteile = new List<string>();

            foreach (String item in nachteil)
            {
                this.EmpfohleneNachteile.Add(item);
            }
        }

        private void InitUngeeigneteVorteile(String _UngeeigneteVorteile)
        {
            String[] vorteil = _UngeeigneteVorteile.Split(';');

            this.UngeeigneteVorteile = new List<string>();

            foreach (String item in vorteil)
            {
                this.UngeeigneteVorteile.Add(item);
            }
        }

        private void InitUngeeigneteNachteile(String _UngeeigneteNachteile)
        {
            String[] nachteil = _UngeeigneteNachteile.Split(';');

            this.UngeeigneteNachteile = new List<string>();

            foreach (String item in nachteil)
            {
                this.UngeeigneteNachteile.Add(item);
            }
        }

        private void InitKulturen(String _Kulturen)
        {
            String[] kultur = _Kulturen.Split(';');

            this.Kulturen = new List<string>();

            foreach (String item in kultur)
            {
                this.Kulturen.Add(item);
            }
        }
      
    }
}
